home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-08-10 | 7.0 KB | 212 lines | [TEXT/MPS ] |
- (*
- File: Threads.mod
-
- Contains: Thread Manager Interfaces.
-
- Version: Technology: System 7.5
- Package: Universal Interfaces 2.0 in “MPW Latest” on ETO #17
-
- Copyright: © 1984-1995 by Apple Computer, Inc.
- All rights reserved.
-
- Bugs?: If you find a problem with this file, use the Apple Bug Reporter
- stack. Include the file and version information (from above)
- in the problem description and send to:
- Internet: apple.bugs.applelink.apple.com
- AppleLink: APPLE.BUGS
-
- *)
-
- (*$TAGS-*)
- (*$CALLING PASCAL*)
- MODULE Threads;
-
- IMPORT SYSTEM, Types, Memory;
-
- (* $PUSH*)
- (* $ALIGN MAC68K*)
- (* $LibExport+*)
-
- TYPE
- ThreadState* = INTEGER;
-
-
- CONST
- kReadyThreadState* = 0;
- kStoppedThreadState* = 1;
- kRunningThreadState* = 2;
-
- (* Error codes have been meoved to Errors.(pah) *)
- (* Thread environment characteristics *)
-
- TYPE
- ThreadTaskRef* = Types.Ptr;
-
- (* Thread characteristics *)
- ThreadStyle* = LONGINT;
-
-
- CONST
- kCooperativeThread* = ASH(1,0);
- kPreemptiveThread* = ASH(1,1);
-
- (* Thread identifiers *)
-
- TYPE
- ThreadID* = LONGINT;
-
-
- CONST
- kNoThreadID* = 0;
- kCurrentThreadID* = 1;
- kApplicationThreadID* = 2;
-
- (* Options when creating a thread *)
-
- TYPE
- ThreadOptions* = LONGINT;
-
-
- CONST
- kNewSuspend* = ASH(1,0);
- kUsePremadeThread* = ASH(1,1);
- kCreateIfNeeded* = ASH(1,2);
- kFPUNotNeeded* = ASH(1,3);
- kExactMatchThread* = ASH(1,4);
-
- (* Information supplied to the custom scheduler *)
-
- TYPE
- SchedulerInfoRec* = RECORD
- InfoRecSize*: LONGINT;
- CurrentThreadID*: ThreadID;
- SuggestedThreadID*: ThreadID;
- InterruptedCoopThreadID*: ThreadID;
- END;
-
- SchedulerInfoRecPtr* = POINTER TO SchedulerInfoRec;
-
- (*
- The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
- of differences between 680x0 and PowerPC runtime architectures with regard to
- the implementation of the Thread Manager.
- *)
- (* Prototype for thread's entry (main) routine *)
- voidPtr* = Types.Ptr;
-
- ThreadEntryProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadParam: (*ΔΔUNIVΔΔ*) Types.Ptr): voidPtr;
-
- (* Prototype for custom thread scheduler routine *)
- ThreadSchedulerProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (schedulerInfo: SchedulerInfoRecPtr): ThreadID;
-
- (* Prototype for custom thread switcher routine *)
- ThreadSwitchProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadBeingSwitched: ThreadID; switchProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr);
-
- (* Prototype for thread termination notification routine *)
- ThreadTerminationProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadTerminated: ThreadID; terminationProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr);
-
- (* Prototype for debugger NewThread notification *)
- DebuggerNewThreadProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadCreated: ThreadID);
-
- (* Prototype for debugger DisposeThread notification *)
- DebuggerDisposeThreadProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadDeleted: ThreadID);
-
- (* Prototype for debugger schedule notification *)
- DebuggerThreadSchedulerProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (schedulerInfo: SchedulerInfoRecPtr): ThreadID;
-
- (* Thread Manager routines *)
-
- PROCEDURE CreateThreadPool*(threadStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Memory.Size): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0501, $ABF2;
- (*$END*)
- PROCEDURE GetFreeThreadCount*(threadStyle: ThreadStyle; VAR freeCount: INTEGER): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0402, $ABF2;
- (*$END*)
- PROCEDURE GetSpecificFreeThreadCount*(threadStyle: ThreadStyle; stackSize: Memory.Size; VAR freeCount: INTEGER): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0615, $ABF2;
- (*$END*)
- PROCEDURE GetDefaultThreadStackSize*(threadStyle: ThreadStyle; VAR stackSize: Memory.Size): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0413, $ABF2;
- (*$END*)
- PROCEDURE ThreadCurrentStackSpace*(thread: ThreadID; VAR freeStack: LONGINT): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0414, $ABF2;
- (*$END*)
- PROCEDURE NewThread*(threadStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: (*ΔΔUNIVΔΔ*) Types.Ptr; stackSize: Memory.Size; options: ThreadOptions; threadResult: (*ΔΔUNIVΔΔ*) Types.Ptr; VAR threadMade: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0E03, $ABF2;
- (*$END*)
- PROCEDURE DisposeThread*(threadToDump: ThreadID; threadResult: (*ΔΔUNIVΔΔ*) Types.Ptr; recycleThread: BOOLEAN): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0504, $ABF2;
- (*$END*)
- PROCEDURE YieldToThread*(suggestedThread: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0205, $ABF2;
- (*$END*)
- PROCEDURE YieldToAnyThread*(): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $42A7, $303C, $0205, $ABF2;
- (*$END*)
- PROCEDURE GetCurrentThread*(VAR currentThreadID: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0206, $ABF2;
- (*$END*)
- PROCEDURE GetThreadState*(threadToGet: ThreadID; VAR threadState: ThreadState): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0407, $ABF2;
- (*$END*)
- PROCEDURE SetThreadState*(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0508, $ABF2;
- (*$END*)
- PROCEDURE SetThreadStateEndCritical*(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0512, $ABF2;
- (*$END*)
- PROCEDURE SetThreadScheduler*(threadScheduler: ThreadSchedulerProcPtr): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0209, $ABF2;
- (*$END*)
- PROCEDURE SetThreadSwitcher*(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr; inOrOut: BOOLEAN): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $070A, $ABF2;
- (*$END*)
- PROCEDURE SetThreadTerminator*(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0611, $ABF2;
- (*$END*)
- PROCEDURE ThreadBeginCritical*(): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $000B, $ABF2;
- (*$END*)
- PROCEDURE ThreadEndCritical*(): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $000C, $ABF2;
- (*$END*)
- PROCEDURE SetDebuggerNotificationProcs*(notifyNewThread: DebuggerNewThreadProcPtr; notifyDisposeThread: DebuggerDisposeThreadProcPtr; notifyThreadScheduler: DebuggerThreadSchedulerProcPtr): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $060D, $ABF2;
- (*$END*)
- PROCEDURE GetThreadCurrentTaskRef*(VAR threadTRef: ThreadTaskRef): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $020E, $ABF2;
- (*$END*)
- PROCEDURE GetThreadStateGivenTaskRef*(threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR threadState: ThreadState): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $060F, $ABF2;
- (*$END*)
- PROCEDURE SetThreadReadyGivenTaskRef*(threadTRef: ThreadTaskRef; threadToSet: ThreadID): Types.OSErr;
- (*$IF NOT GENERATINGCFM*)
- INLINE PASCAL $303C, $0410, $ABF2;
- (*$END*)
-
- (* $ALIGN RESET*)
- (* $POP*)
-
- END Threads.
-